.TH std::swap(std::shared_ptr) 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::swap(std::shared_ptr) \- std::swap(std::shared_ptr)

.SH Synopsis
   Defined in header <memory>
   template< class T >
   void swap( std::shared_ptr<T>& lhs, std::shared_ptr<T>& rhs )          \fI(since C++11)\fP
   noexcept;

   Specializes the std::swap algorithm for std::shared_ptr. Swaps the contents of lhs
   and rhs. Calls lhs.swap(rhs).

.SH Parameters

   lhs, rhs - smart pointers whose contents to swap

.SH Return value

   \fI(none)\fP

.SH Complexity

   Constant.

.SH Example


// Run this code

 #include <iostream>
 #include <memory>
 #include <string>

 struct Foo {
     Foo(int _val) : val(_val) { std::cout << "Foo...\\n"; }
     ~Foo() { std::cout << "~Foo...\\n"; }
     std::string print() { return std::to_string(val); }
     int val;
 };

 int main()
 {
     std::shared_ptr<Foo> p1 = std::make_shared<Foo>(100);
     std::shared_ptr<Foo> p2 = std::make_shared<Foo>(200);
     auto print = [&]() {
         std::cout << " p1=" << (p1 ? p1->print() : "nullptr");
         std::cout << " p2=" << (p2 ? p2->print() : "nullptr") << '\\n';
     };
     print();

     std::swap(p1, p2);
     print();

     p1.reset();
     print();

     std::swap(p1, p2);
     print();
 }

.SH Output:

 Foo...
 Foo...
  p1=100 p2=200
  p1=200 p2=100
 ~Foo...
  p1=nullptr p2=100
  p1=100 p2=nullptr
 ~Foo...

.SH See also

   swap swaps the values of two objects
        \fI(function template)\fP
   swap swaps the contents
        \fI(public member function)\fP
